home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / vidhrdw / jailbrek.c < prev    next >
C/C++ Source or Header  |  1999-04-17  |  3KB  |  125 lines

  1. #include "driver.h"
  2. #include "vidhrdw/generic.h"
  3.  
  4. unsigned char *jailbrek_scroll_x;
  5.  
  6. void jailbrek_vh_convert_color_prom(unsigned char *palette, unsigned short *colortable,const unsigned char *color_prom) {
  7.     #define TOTAL_COLORS(gfxn) (Machine->gfx[gfxn]->total_colors * Machine->gfx[gfxn]->color_granularity)
  8.     #define COLOR(gfxn,offs) (colortable[Machine->drv->gfxdecodeinfo[gfxn].color_codes_start + offs])
  9.     int i;
  10.  
  11.     for ( i = 0; i < Machine->drv->total_colors; i++ ) {
  12.         int bit0,bit1,bit2,bit3;
  13.  
  14.  
  15.         bit0 = (color_prom[0] >> 0) & 0x01;
  16.         bit1 = (color_prom[0] >> 1) & 0x01;
  17.         bit2 = (color_prom[0] >> 2) & 0x01;
  18.         bit3 = (color_prom[0] >> 3) & 0x01;
  19.         *(palette++) = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3;
  20.  
  21.         bit0 = (color_prom[0] >> 4) & 0x01;
  22.         bit1 = (color_prom[0] >> 5) & 0x01;
  23.         bit2 = (color_prom[0] >> 6) & 0x01;
  24.         bit3 = (color_prom[0] >> 7) & 0x01;
  25.         *(palette++) = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3;
  26.  
  27.         bit0 = (color_prom[Machine->drv->total_colors] >> 0) & 0x01;
  28.         bit1 = (color_prom[Machine->drv->total_colors] >> 1) & 0x01;
  29.         bit2 = (color_prom[Machine->drv->total_colors] >> 2) & 0x01;
  30.         bit3 = (color_prom[Machine->drv->total_colors] >> 3) & 0x01;
  31.         *(palette++) = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3;
  32.  
  33.         color_prom++;
  34.     }
  35.  
  36.     color_prom += Machine->drv->total_colors;
  37.  
  38.     for ( i = 0; i < TOTAL_COLORS(0); i++ )
  39.         COLOR(0,i) = ( *color_prom++ ) + 0x10;
  40.  
  41.     for ( i = 0; i < TOTAL_COLORS(1); i++ )
  42.         COLOR(1,i) = *color_prom++;
  43. }
  44.  
  45. int jailbrek_vh_start( void ) {
  46.  
  47.     if ( ( dirtybuffer = malloc( videoram_size ) ) == 0 )
  48.         return 1;
  49.     memset( dirtybuffer, 1, videoram_size );
  50.  
  51.     if ( ( tmpbitmap = osd_new_bitmap(Machine->drv->screen_width * 2,Machine->drv->screen_height,Machine->scrbitmap->depth ) ) == 0 ) {
  52.         free(dirtybuffer);
  53.         return 1;
  54.     }
  55.  
  56.     return 0;
  57. }
  58.  
  59. void jailbrek_vh_stop( void ) {
  60.  
  61.     free( dirtybuffer );
  62.     osd_free_bitmap( tmpbitmap );
  63. }
  64.  
  65. static void drawsprites( struct osd_bitmap *bitmap ) {
  66.     int i;
  67.  
  68.     for ( i = 0; i < spriteram_size; i += 4 ) {
  69.         int tile, color, sx, sy, flipx, flipy;
  70.  
  71.         /* attributes = ?tyxcccc */
  72.  
  73.         sx = spriteram[i+2] - ( ( spriteram[i+1] & 0x80 ) << 1 );
  74.         sy = spriteram[i+3];
  75.         tile = spriteram[i] + ( ( spriteram[i+1] & 0x40 ) << 2 );
  76.         flipx = spriteram[i+1] & 0x10;
  77.         flipy = spriteram[i+1] & 0x20;
  78.         color = spriteram[i+1] & 0x0f;
  79.  
  80.         drawgfx(bitmap,Machine->gfx[1],
  81.                 tile,color,
  82.                 flipx,flipy,
  83.                 sx,sy,
  84.                 &Machine->drv->visible_area,TRANSPARENCY_COLOR,0);
  85.     }
  86. }
  87.  
  88. void jailbrek_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh) {
  89.     int i;
  90.  
  91.     if ( full_refresh )
  92.         memset( dirtybuffer, 1, videoram_size );
  93.  
  94.     for ( i = 0; i < videoram_size; i++ ) {
  95.         if ( dirtybuffer[i] ) {
  96.             int sx,sy, code;
  97.  
  98.             dirtybuffer[i] = 0;
  99.  
  100.             sx = ( i % 64 );
  101.             sy = ( i / 64 );
  102.  
  103.             code = videoram[i] + ( ( colorram[i] & 0xc0 ) << 2 );
  104.  
  105.             drawgfx(tmpbitmap,Machine->gfx[0],
  106.                     code,
  107.                     colorram[i] & 0x0f,
  108.                     0,0,
  109.                     sx*8,sy*8,
  110.                     0,TRANSPARENCY_NONE,0);
  111.         }
  112.     }
  113.  
  114.     {
  115.         int scrollx[32];
  116.  
  117.         for ( i = 0; i < 32; i++ )
  118.             scrollx[i] = -( ( jailbrek_scroll_x[i+32] << 8 ) + jailbrek_scroll_x[i] );
  119.  
  120.         copyscrollbitmap(bitmap,tmpbitmap,32,scrollx,0,0,&Machine->drv->visible_area,TRANSPARENCY_NONE,0);
  121.     }
  122.  
  123.     drawsprites( bitmap );
  124. }
  125.